2025-01-11 obsidian 블로그 개편플랜

개요

모델링은 중요하지 않은 것을 의도적으로 가리거나 제거함으로써 문제를 푸는 단순화된 시각을 제공해주는것에 의미가 있다. 따라서 모든 모델링은 완전하지 않다는 것을 기억해야 한다. 모든 것을 연결하는 것은 오히려 모든 것을 잃어버릴 수 있다. 지금 내 옵시디언을 봐도 그렇다. 데일리 노트가 모든 것을 연결해오고 있었던 참이라 이제 와서 보니 연결당한 문서는 마치 데카르트곱셈이 되어버려 굉장히 비대해진 상태가 되었다. 빽빽하게 늘어진 그래프 뷰를 보며 나는 이 그래프에서 어떤 연관성도 찾을 수 없게 되었다.

블로그를 다시 개편하면서 문서간에 맥락을 어떻게 유지하면 좋을지 생각해보았다. 블로그는 블로그대로, 데일리 노트는 데일리노트대로, 위키는 위키대로 각자의 목적을 이루도록 모델링해야한다. 어느정도는, 꽤 잘 정리가 된 편이다. welcome 는 모든 위키의 출발지로, 각 주제별로 문서 이름 앞에 ID를 붙여 사용하고 있다. Daily Notes는 내 일기장으로, 일일 브리핑과 데일리 루틴, 오늘의 신념 등을 작성하는 공간이다. 블로그는 아직 제대로 마련이 되어있지 않다. 위키 중에서 개별로 퍼블리시가 될 정도로 완성도가 높은 문서를 블로그로도 내보낼 수는 있겠지만 아직 잘 모르겠다.

데일리노트, 위키, 블로그 각자의 목표가 뚜렷하기 때문에 이것을 서브 도메인 또는 URI로 분리하여 제공할 수 있을 것 같다. 예를 들어 daily.choiwheatley.com, wiki.choiwheatley.com 이렇게 말이다. 이렇게 각각의 도메인으로 분리하게 되면 서로 다른 테마, 심지어 서로 다른 프레임워크를 가져다 써도 된다. 링크는 어떻게 하냐고? 몰라, nginx가 분배하게 만들어야지 뭐.

Requirements

URI 구성

모든 페이지는 다음 내용을 포함하여야 한다

double brackets [ [ ] ]를 사용하여 0070 Obsidian 💎 이렇게 링크를 만들어낼 수 있어야 한다. 또한, [ [ 0070 Obsidian|obsidian ] ]와 같이 alias도 지원하여야 하며, [ [ 0070 Obsidian#커뮤니티 ] ]와 같이 헤딩 링크도 지원할 수 있어야 한다.

아래와 같이 document preview도 지원해야 한다:

Images

이미지는 Git LFS에 저장이 된 정적 파일 URL을 사용해야 한다. 현재 (2025-01-13 기준) 내 mkdocs를 사용하고 있는 블로그는 이 이미지를 URL세팅이 안되어있어 모든 이미지가 불러와지지 않는 문제를 안고있다.

Pasted image 20240916210505.png

Excalidraws

Excalidraw도 또한 ! [ [ **.excalidrawfile ] ] 와 같이 preview가 지원되어야 한다. 예시:

Code Fence

거의 모든 코드블럭의 syntax highlighting을 지원해야 한다. Python, C, C++, Javascript, Typescript, Java, Docker, json, shell, toml가 되는지 테스트.

# Python: Simple function to calculate factorial
def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n - 1)

print(factorial(5))
// C: Program to calculate the sum of two numbers
#include <stdio.h>

int main() {
    int a, b, sum;
    printf("Enter two integers: ");
    scanf("%d %d", &a, &b);
    sum = a + b;
    printf("Sum: %d\n", sum);
    return 0;
}
// C++: Example of a simple class
#include <iostream>
using namespace std;

class Animal {
public:
    void speak() {
        cout << "I am an animal!" << endl;
    }
};

int main() {
    Animal dog;
    dog.speak();
    return 0;
}
// JavaScript: Function to reverse a string
function reverseString(str) {
    return str.split("").reverse().join("");
}

console.log(reverseString("hello"));
// TypeScript: Example with type annotations
function greet(name: string): string {
    return `Hello, ${name}!`;
}

console.log(greet("Alice"));
// Java: Simple HelloWorld program
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
# Dockerfile: Simple setup for a Node.js app
FROM node:16

WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["node", "index.js"]
EXPOSE 3000
{
  "name": "example",
  "version": "1.0.0",
  "description": "A simple JSON example",
  "dependencies": {
    "express": "^4.18.2"
  }
}
# TOML: Configuration file example
title = "TOML Example"

[database]
server = "192.168.1.1"
ports = [ 8000, 8001, 8002 ]
enabled = true
# YAML: Sample configuration
version: "3.9"
services:
  web:
    image: nginx
    ports:
      - "80:80"
  app:
    build:
      context: .
      dockerfile: Dockerfile
# Bash: Script to print current date and time
#!/bin/bash

echo "Current date and time:"
date

Mermaid.js

CodeFence가 mermaid.js 문법으로 쓰여져 있을 경우, mermaid graph를 렌더링해야한다. 예:

graph LR;
socket --> connect
connect --> id1["send or write"]
connect --> id2["recv or read"]

Title을 대상으로 Fuzzy Search 기능을 지원해야 한다.

dataview

dataview만 지원되면 사실 blog, dailynotes를 이걸로 렌더링 하게 만들고 그 페이지를 기본값으로 설정하기만 하면 된다. 문제는 이 dataviewjs 라이브러리는 옵시디언의, 옵시디언을 위한, 옵시디언에 의한 플러그인이기 때문에 CI 또는 동적 렌더링에서 사용하기 굉장히 까다로워 보인다는 점이 있다.

Research

Obsidian으로 블로그 만들기#Scraps 중에서 Obsidian webpage export 플러그인을 다운받아 export 해보았으나, 파일수가 너무 많아서 중간에 html로 변환하다가 고장이 나버린다.

TODO Obsidian으로 블로그 만들기#Digital Garden Plugin을 시도해볼 예정이다. 도전해보고 그 결과를 작성해보자.

Wireframe

Troubleshooting Digital Garden